# This file replaces the WORKSPACE file when using bzlmod.

# module declares certain properties of the Bazel module represented by the current Bazel repo.
# These properties are either essential metadata of the module (such as the name and version),
# or affect behavior of the current module and its dependents.
module(
    name = "example_bzlmod_build_file_generation",
    version = "0.0.0",
    compatibility_level = 1,
)

# The following stanza defines the dependency rules_python.
# For typical setups you set the version.
# See the releases page for available versions.
# https://github.com/bazelbuild/rules_python/releases
bazel_dep(name = "rules_python", version = "0.0.0")

# The following loads rules_python from the file system.
# For usual setups you should remove this local_path_override block.
local_path_override(
    module_name = "rules_python",
    path = "../..",
)

# The following stanza defines the dependency rules_python_gazelle_plugin.
# For typical setups you set the version.
# See the releases page for available versions.
# https://github.com/bazelbuild/rules_python/releases
bazel_dep(name = "rules_python_gazelle_plugin", version = "0.0.0")

# The following starlark loads the gazelle plugin from the file system.
# For usual setups you should remove this local_path_override block.
local_path_override(
    module_name = "rules_python_gazelle_plugin",
    path = "../../gazelle",
)

# The following stanza defines the dependency for gazelle
# See here https://github.com/bazelbuild/bazel-gazelle/releases/ for the
# latest version.
bazel_dep(name = "gazelle", version = "0.30.0", repo_name = "bazel_gazelle")

# The following stanze returns a proxy object representing a module extension;
# its methods can be invoked to create module extension tags.
python = use_extension("@rules_python//python/extensions:python.bzl", "python")

# We next initialize the python toolchain using the extension.
# You can set different Python versions in this block.
python.toolchain(
    configure_coverage_tool = True,
    is_default = True,
    python_version = "3.9",
)

# Use the extension, pip.parse, to call the `pip_repository` rule that invokes
# `pip`, with `incremental` set. The pip call accepts a locked/compiled
# requirements file and installs the dependencies listed within.
# Those dependencies become available in a generated `requirements.bzl` file.
# You can instead check this `requirements.bzl` file into your repo.
# Because this project has different requirements for windows vs other
# operating systems, we have requirements for each.
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
    hub_name = "pip",
    # The interpreter_target attribute points to the interpreter to
    # use for running pip commands to download the packages in the
    # requirements file.
    # As a best practice, we use the same interpreter as the toolchain
    # that was configured above; this ensures the same Python version
    # is used for both resolving dependencies and running tests/binaries.
    # If this isn't specified, then you'll get whatever is locally installed
    # on your system.
    python_version = "3.9",
    requirements_lock = "//:requirements_lock.txt",
    requirements_windows = "//:requirements_windows.txt",
)

# Imports the pip toolchain generated by the given module extension into the scope of the current module.
use_repo(pip, "pip")

# This project includes a different module that is on the local file system.
# Add the module to this parent project.
bazel_dep(name = "other_module", version = "", repo_name = "our_other_module")
local_path_override(
    module_name = "other_module",
    path = "other_module",
)
